[英]Integrate Linphone with asterisk for push notification
我已经安装了asterisk server
并编译了最新的linphone
iOS源代码。 现在一切都很好,没有后台和锁定手机屏幕,打电话。
当应用程序关闭或 iPhone 屏幕锁定时,我无法接听来自其他linphone
的电话(从 playstore 下载)。
我已经使用SIP
将两个linphone
注册到星号服务器。
我还在苹果帐户上创建了development/distribute certificates, APNS, VOIP
推送。
但我仍然无法接到 iOS 应用程序的电话,所以我的问题是:
flexisip, Opensips, kamailio
等使用任何支持推送的代理,或者我可以只使用Asterisk
和Linphone
或任何其他方式在应用程序关闭或锁定屏幕时获得通知? 还必须使用任何第三方服务器来推送通知以wakeup the app, like pusher, onesignal
?
谢谢
你可以使用 flexisip。 它是半工作的,没有文档
你可以使用 asterisk 或 kamailio,但你应该通过外部脚本和拨号规则来推动自己。
我也在考虑 linphone 和 flexisip,但它对我不起作用。 我想我可以放弃 flexisip 并在拨打分机号之前直接从 asterisk 推送。 我有一个 agi 脚本,它从联系人那里获取 pn-tok,然后进行推送:
$serverKey = " long string coming from firebase ";
$notif = ['title' => 'You have a call', 'body' => "Call from $CLI"];
$headers = [CURLOPT_HTTPHEADER => ["Authorization: key=$serverKey", 'Content-Type: application/json']];
$pjsipContact = ast_get_var("PJSIP_AOR(1000,contact)");
if(!empty($pjsipContact)) {
$pjsipUri = ast_get_var("PJSIP_CONTACT($pjsipContact,uri)");
preg_match('/pn-tok=([^;]+)/', $pjsipUri, $toArr);
if (count($toArr) == 2) {
log_cli("send noti to {$toArr[1]}");
curlGetPage('https://fcm.googleapis.com/fcm/send', json_encode(['to' => $toArr[1], 'notification' => $notif]), $headers, 443, 'POST', TRUE);
}
}
使用此 agi,手机会收到推送并在通知中显示,但 linphone 不会恢复生机。 推送通知是否有特定格式来实际唤醒 linphone 并使其再次注册?
谢谢。
您当然可以推送到您自己编译的 Linphone 应用程序以在仅使用星号的呼叫之前唤醒它。 要点是使用 DB 拨号计划功能从客户端联系信息中获取推送令牌,并将其传递给 AGI 脚本,然后该脚本将使用令牌启动推送并唤醒设备。 您需要添加等待延迟以允许电话先重新注册,然后您可以对分机执行 dial() 。 对于 Android,您需要使用“数据”消息类型而不是“通知”类型,否则手机不会唤醒,只会显示通知。 有关如何完成此操作的详细信息,请参阅这篇文章。 请注意,该帖子讨论的是 Android,但可以通过修改 push.php 脚本轻松适应 IOS。
https://community.asterisk.org/t/interest-in-implementing-sip-push-notification/75563/19
对于 voip 呼叫,移动客户端必须接收推送通知,然后向 SIP 服务器注册自己才能接收呼叫邀请。 所以任何软交换或PBX都可以有这种机制来发起推送通知并等待离线客户端上线并发送邀请请求。 所以 PBX 在这里起着重要的作用,等待客户端出现在线后转发邀请。
您可以使用此github 存储库中的推送脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.