开发语音机器人接听功能用到的sip相关知识

开发接听语音机器人用到的sip相关知识

1、项目背景

  我们公司最近在开发这样一个业务:买房人给房产经纪人的隐私号码(X号码)打电话,30s内经纪人没有接起,会把用户的电话接入到语音机器人端,语音机器人提醒用户《有什么需要留言的么》,用户留言,然后将用户的相关留言回传给业务方,方便经纪人接听电话。

2、实现逻辑

  经纪人30s未接起电话,虚拟号码的供应商会给将电话打给我们提供的固话,我们的固话提供商会发送sip信令到我们约定好的机器和端口,从而建立sip连接进行会话。

  其中涉及sip协议的内容包括:怎样监听指定机器端口的sip信令,sip信令怎么将两个电话绑定起来进行通话。

2.1、sip监听

  java提供一些sip监听的工具类:SipStack、SipProvider、SipFactory、SipListerner

  

 protected void createListenPoint(String listenerName, String serverName, String ip, Integer port)
            throws PeerUnavailableException, InvalidArgumentException, TransportNotSupportedException,
            ObjectInUseException, TooManyListenersException {
        logger.info("init listener{} begin !!!", listenerName);
        this.strListenerName = listenerName;
        // 设置SipStack参数
        Properties properties = new Properties();
        properties.setProperty("javax.sip.STACK_NAME", serverName);
        properties.setProperty("javax.sip.IP_ADDRESS", ip);
        SipFactory sipFactory = SipFactory.getInstance();
        sipFactory.setPathName("gov.nist");
        sipStack = sipFactory.createSipStack(properties);
        ProtocolObjects.init(sipFactory);
        // 创建SipProvider对象
        ListeningPoint udp = sipStack.createListeningPoint(ip, port, ProtocolObjects.transport);
        provider = sipStack.createSipProvider(udp);
        // 设置监听
        provider.addSipListener(this);
        logger.info("init listener{} end !!!", listenerName);
    }
SipListener是基础接口,ip、端口监听到request信令会把请求包装未RequestEvent事件。
package javax.sip;

import java.util.EventListener;

public interface SipListener extends EventListener {
    void processRequest(RequestEvent var1);

    void processResponse(ResponseEvent var1);

    void processTimeout(TimeoutEvent var1);

    void processIOException(IOExceptionEvent var1);

    void processTransactionTerminated(TransactionTerminatedEvent var1);

    void processDialogTerminated(DialogTerminatedEvent var1);
}

原文地址:https://www.cnblogs.com/zhangchiblog/p/13822345.html