[SR-Users] Presence module with external MWI
Anthony Joseph Messina
amessina at messinet.com
Mon Feb 18 23:56:58 CET 2019
On Monday, February 18, 2019 3:06:32 PM CST Trevor Peirce wrote:
> Hello,
>
> Looking for pointers as to what I'm missing here.
>
> I'm using the presence module to allow UAs to subscribe to
> message-summary events. I can see the entries appearing in the
> active_watchers table and I see subscription renewals increment the cseq
> columns so I'm satisfied this part is working well.
>
> I'm having trouble finding out how to tell Kamailio about a change to
> the message-summary so that it can notify the watchers.
>
> The pua module seems to provide a way but it doesn't seem to work with
> the subscriptions set up by the presence module. The presence module
> itself does not seem to offer any RPCs capable of doing this.
>
> Appreciate any pointers!
I use the following Python3 script with Asterisk 16 since it won't publish MWI
natively to Kamailio (yet)
### voicemail.conf
externnotify=/usr/bin/asterisk-kamailio-publish-mwi
### asterisk-kamailio-publish-mwi
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import argparse
import requests
# http://kamailio.org/docs/modules/stable/modules/jsonrpcs
KAMAILIO_RPC_URL = 'http://<KAMAILIO IP>:5060/RPC'
SIP_NEXTHOP = 'sip:127.0.0.1:5060'
SIP_DOMAIN = 'example.com'
class ExternNotifyHandler:
def __init__(self, context, exten, new, old, urgent):
"""
Parse context, extension, and new, old, and urgent message counts
"""
self.context = context
if context == 'default':
self.context = SIP_DOMAIN
self.exten = exten
self.recipient = ("sip:{}@{}").format(self.exten, self.context)
self.waiting = 'no'
if new > 0:
self.waiting = 'yes'
self.body = ("Messages-Waiting: {}\r\n"
"Message-Account: {}\r\n"
"Voice-Message: {:d}/{:d} ({:d}/0)\r\n").format(
self.waiting, self.recipient, new, old, urgent)
def kamailio_rpc_sip_publish(self):
"""
Generate a SIP PUBLISH MWI via Kamailio's jsonrpcs module
"""
headers = ("From: <{0}>\r\n"
"To: <{0}>\r\n"
"Max-Forwards: 1\r\n"
"Event: message-summary\r\n"
"Content-Type: application/simple-message-summary; "
"charset=utf-8\r\n").format(self.recipient)
content = {
'id': 1,
'jsonrpc': '2.0',
'method': 'tm.t_uac_start',
'params': [
'PUBLISH',
self.recipient,
SIP_NEXTHOP,
'.',
headers,
self.body
]
}
# http://docs.python-requests.org/en/latest/user/quickstart/
try:
r = requests.post(KAMAILIO_RPC_URL, allow_redirects=False,
json=content, timeout=5)
r.raise_for_status()
except requests.exceptions.ConnectionError as e:
print(e)
pass
except requests.exceptions.RequestException as e:
print(e)
pass
# Main processing
if __name__ == "__main__":
"""
Parse Asterisk VoiceMail externnotify positional command line arguments
context, extension, new voicemails, old voicemails, urgent voicemails
"""
parser = argparse.ArgumentParser()
parser.add_argument('context', help='Voicemail context')
parser.add_argument('exten', help='Voicemail extension')
parser.add_argument('new', type=int, help='New voicemail count')
parser.add_argument('old', type=int, help='Old voicemail count')
parser.add_argument('urgent', type=int, help='Urgent voicemail count')
args = parser.parse_args()
p = ExternNotifyHandler(args.context, args.exten,
args.new, args.old, args.urgent)
p.kamailio_rpc_sip_publish()
--
Anthony - https://messinet.com
F9B6 560E 68EA 037D 8C3D D1C9 FF31 3BDB D9D8 99B6
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20190218/7c656f95/attachment.sig>
More information about the sr-users
mailing list