通信人家园

标题: VoIP网关的数图(Digitmap)匹配规则  [查看完整版帖子] [打印本页]

时间:  2008-4-29 14:43
作者: sharkoneal     标题: VoIP网关的数图(Digitmap)匹配规则

    VoIP网关在上报用户拨打的号码时,最好是将号码先存放在一个BUFFER中,全部收齐后再通过一个消息发出去。问题在于,网关如何能够预见用户拨打的号码的数量。解决办法是:网关收到号码后与digitmap中的entry(条目)进行比较,如果与1个entry完全匹配,则立即发送消息给MGC;如果与1个entry部分匹配,但是再收到其它号码可能与某个entry完全匹配,则继续等待。

    编写digitmap中的entry(条目)的语法如下:
   * Digit:    A digit from "0" to "9".
   * Timer:    The symbol "T" matching a timer expiry.
   * DTMF:     A digit, a timer, or one of the symbols "A", "B", "C",
               "D", "#", or "*".  Extensions may be defined.
   * Wildcard: The symbol "x" which matches any digit ("0" to "9").
   * Range:    One or more DTMF symbols enclosed between square brackets
               ("[" and "]").
   * Subrange: Two digits separated by hyphen ("-") which matches any
               digit between and including the two.  The subrange
               construct can only be used inside a range construct,
               i.e., between "[" and "]".
   * Position: A period (".") which matches an arbitrary number,
               including zero, of occurrences of the preceding
               construct.(position表示前面的数字等可以出现任意次数,包括“0”次)

      如果一个号码是1800383848,即使设置成digitmap是:
([2-8]xxxxxx|13xxxxxxxxx|1800383848|0xxxxxxxx|9xxxx|*|#|x.#|1[0124-9]x|[0-9*#].T)
网关也不会一次性上报1800383848上来,因为数图处理时会以最早适配到的数图项上报,而|1[0124-9]x|是最先适配到的180,因此必需修改digitmap成这样:
|1[0124-79]x|18[1-9]x|1800383848|
才会一次性上报1800383848。

      再比如:(xxxxxxx|x11)
当收到“41”时,网关会等待;当收到411时,由于和“x11”完全匹配,尽管有可能匹配“xxxxxxx”,但是网关仍会立即发送“411”给MGC。

      下面的DIGITMAP例子更为精确:
(0[12].|00|1[12].1|2x.#)
如果拨“0”,则因为(“.”)允许前面的数字[12]出现的次数为0到任意值 ——即可以接收的数字为0、01、011、0111、02、022、0222——而马上满足匹配。于是用户就没有机会拨“00”。
如果拨“1”,则只是部分匹配。拨“12”也是仅仅部分匹配,可是拨“11”和“121”都是匹配的。
如果拨“2”,则是部分匹配。拨"23", "234", "2345"等也只是部分匹配。只有拨“#”才会产生一个完全匹配。例如“2345#”。拨“2#”也是一个匹配。

      如果没有使用数图,用户必须在拨完号之后按下呼叫键“call”,就像使用移动电话一样。在VOIP的早些时候,许多软件和硬件使用“#”键呼出。今天随着VOIP同PSTN的融合,由于“#”键在PSTN系统中被广泛用于补充服务,所以使用“#”键作为呼叫功能不再是一个好主意了。





通信人家园 (https://www.txrjy.com/) Powered by C114