将 Linphone 与星号集成以进行推送通知

Integrate Linphone with asterisk for push notification

我已经安装了asterisk server并编译了最新的linphoneiOS源代码。 现在一切正常,无需后台和锁定 phone 屏幕,调用。

当应用程序关闭或iPhone屏幕锁定时,我无法接听来自其他人的电话linphone(从playstore下载)。

我已经使用 SIP 将两个 linphone 注册到星号服务器。

我还创建了 development/distribute certificates, APNS, VOIP 苹果账号推送。

但我仍然无法接到 iOS 应用程序的电话, 所以我的问题:

  1. 我是否必须使用任何支持推送的代理,例如 flexisip, Opensips, kamailio 等,或者我可以只使用 AsteriskLinphone 或任何其他方式在应用程序启动时获得通知关闭或锁定屏幕?

还必须使用任何第三方服务器将通知推送到 wakeup the app, like pusher, onesignal?

谢谢

你可以使用flexisip。它 semi-working 并且没有文档

您可以使用 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);
  }
}

有了这个敏捷,phone 收到推送并在通知中显示,但 linphone 没有复活。 推送通知是否有特定的格式来真正唤醒 linphone 并使其重新注册?

谢谢。

您当然可以推送到您自己编译的 Linphone 应用程序以在调用前仅使用星号唤醒它。要点是使用 DB 拨号计划功能从客户端联系信息中获取推送令牌,并将其传递给 AGI 脚本,然后该脚本将使用令牌启动推送并唤醒设备。您需要添加等待延迟以允许 phone 首先重新注册,然后您可以对分机执行 dial() 。对于 Android,您需要使用 "data" 消息类型而不是 "notification" 类型,否则 phone 不会唤醒,只会显示通知。请参阅此 post 以了解有关如何完成此操作的详细信息。请注意,post 讨论了 Android,但可以通过修改 push.php 脚本轻松适应 IOS。

https://community.asterisk.org/t/interest-in-implementing-sip-push-notification/75563/19

对于 voip 呼叫,移动客户端必须接收推送通知,然后向 SIP 服务器注册自己才能接收 Call-invite 。所以任何软交换或者PBX都可以有这个机制来发起push-notification等待离线客户端上线发送邀请请求。所以 PBX 在这里起着重要的作用,等待客户端上线后转发邀请。

您可以使用此 github repository 中的推送脚本。