Прежде всего, рассмотрим как устроен AMI. Нужны базовые знания:
- Что такое строка пакета AMI?
- Что такое пакет AMI?
Строка
Для связи Астериск и клиента используется построчный протокол, каждая строка которого состоит из:
<Key>: <Value><CRLF>
где <Key> — ключевое слово, <Value> — значение параметра. Завершается строка последовательностью <CRLF>.
Пакет
Пакет в AMI — это набор строк, состоящих из <Key>: <Value><CRLF>. Пакет ОБЯЗАТЕЛЬНО должен оканчиваться дополнительной последовательностью <CRLF>. То есть AMI воспринимает двойной CRLF как признак завершения пакета.
Пример:
1 2 3 |
Action: login Username: admin Secret: passwd1234 |
В примере, Action, Username, Secret — это . Значения — admin, passwd1234. После строки Secret: passwd1234 следует двойной CRLF, который обозначает окончание пакета.
Особенности работы с AMI в 1С
Версия 1С:Предприятие 7.7 использует для разделения строк функцию РазделительСтрок. Это и есть CRLF.
В версии 1С:Предприятие 8.x используется Unicode. В качестве разделителя для строк в AMI необходимо использовать конструкцию встроенного языка:
1 2 |
<span style="color: #0000ff;">CRLF</span> <span style="color: #ff0000;">=</span> <span style="color: #0000ff;">Символы</span><span style="color: #ff0000;">.</span><span style="color: #0000ff;">CR</span> <span style="color: #ff0000;">+</span> <span style="color: #0000ff;">Символы</span><span style="color: #ff0000;">.</span><span style="color: #0000ff;">LF<span style="color: #ff0000;">; </span></span> |
Можно использовать более универсальную конструкцию
1 |
<span style="color: #0000ff;">CRLF</span> <span style="color: #ff0000;">= Симв(</span>13<span style="color: #ff0000;">) + Симв(</span>10<span style="color: #ff0000;">);</span> // 1С 7.7 |
1 |
<span style="color: #0000ff;">CRLF </span><span style="color: #ff0000;">=</span> <span style="color: #0000ff;">Символ</span><span style="color: #ff0000;">(</span>13<span style="color: #ff0000;">) +</span> <span style="color: #0000ff;">Символ</span><span style="color: #ff0000;">(</span>10<span style="color: #ff0000;">);</span> // 1С 8.x |