SIPメッセージング

2024年10月30日 (水) 16:59時点におけるTakahashi (トーク | 投稿記録)による版 (Asteriskでの実装)

SIPメッセージで電話機等でメッセージを交換する方法。ブラウザ等を使えばチャット用にも使える。要するにSMSみたいなもん。

目次

Asteriskでの実装

Asteriskは音声通話のみならずSIPメッセージの『交換』にも使える。

SIP MESSAGE

MESSAGE sip:1000@192.168.254.234 SIP/2.0
Via: SIP/2.0/WSS 192.0.2.191;received=192.168.254.30;branch=z9hG4bK1314248
To: <sip:1000@192.168.254.234>
From: "TAKAHASHI,Takao" <sip:phone33@192.168.254.234>;tag=7m8l4i50nj
CSeq: 1 MESSAGE
Call-ID: glia153j7er66kd35o0s
Max-Forwards: 70
Supported: outbound
User-Agent: Browser Phone 0.3.27 (SIPJS - 0.20.0) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 
Safari/537.36
Content-Type: text/plain
Content-Length: 7
Content-Type: text/plain
Content-Length:     7

hoge

SIPのMESSAGEによるメッセージ例。

チャネル

基本的にエンドポイント同士は通常のPJSIP/phone123のような形式で認識される。ただし接続した際のチャネルが異なり、音声パスではなく ast_message_queue となる。

${CHANNEL(name)} = Message/ast_msg_queue

SIPでメッセージを受け取ると上記のようなチャネル名となるので、これを判断することで音声通話ではなくSIPメッセージあると判断できる。

メッセージ本体

ファンクションMESSAGE()がメッセージ自体のハンドリングを行う。

MESSAGE(from) r/w

送信元

MESSAGE(to) r/w

送信先

MESSAGE(body) r/w

メッセージの実体

MESSAGE(custom_data) w/o

mark_all_outbound または clear_all_outbound を指定