Pull to refresh

Comments 12

>> В противном случае велик риск получить ошибку вот такого вида tgl/mtproto-utils.c:101: BN2ull: Assertion 0' failed. SIGNAL received

Насколько я понял — утилита падает в том случае, когда принимает информацию, формата которой не знает (например нескучные стикеры там, анимированные gif и прочая модная хрень). Что в нашем случае некритично.

Одно время плотно занимался этим вариантом построения «бота». В отличие от классического бота можно писать тем абонентам, с которыми ещё не было общения. А также узнавать — подключен ли абонент к телеграму :)

Но не смог решить проблему получения сообщения и складывания его в базу. Споткнулся на настройке lua-скриптов…
Утилита падает, если не закомментировать указанные строки, еще до того, как пользователь в первый раз введет свой номер телефона.
Можно telegram-cli в режиме демона запустить и складывать все данные в базу.

А вот здесь поподробнее, пожалуйста:
Как именно происходит складывание в базу? У Вас получилось подключиться из lua к СУБД?
Мы не углублялись в процесс получения сообщений — не было такой необходимости, но полагаю, можно решить задачу быстро и в лоб: запустить /usr/src/tg/bin/telegram-cli -k /usr/src/tg/tg-server.pub -W >> file в screen и просто забирать информацию из файла
Добавил в extensions.conf
exten => 333,n,Set(name=Miha)
exten => 333,n,System(/etc/asterisk/telegram.sh ${name} «Входящий звонок от ${CALLERID(num)}»)
Но не работает. Поменял 333 на свой формат _XXXX, работает, но отправляет сообщение если сбрасывает звонок не тот кто звонил, а кому звонили.
Чтобы при всех звонках сообщение приходило, то нужно СНАЧАЛА дергать скрипт, а ПОТОМ вызывать Dial
exten => 333,n,Set(name=Иван_Иванов)
exten => 333,n,System(/home/asterisk/telegram.sh ${name} «Входящий звонок от ${CALLERID(num)}»)

не отрабатывает, а именно не вызывается *.sh, переменные передаются видно по логам. Asterisk 11.7.0
сам скрипт от пользователя выполняется на ура, подскажите что не так?

extensions.conf
exten=>_7XXXXXXXXXX,1,Dial(SIP/${EXTEN}@multifon-out,30,r)
exten=>_7XXXXXXXXXX,n,Set(name=Denis_A)
exten=>_7XXXXXXXXXX,n,System(/etc/asterisk/tg.sh ${name} «Входящий звонок от ${CALLERID(num)}»)

Скорее всего, пользователь, от которого работает Астериск, не имеет прав на доступ к конфигу telegram-cli или к его исполнению. Посмотрите от кого запущен Астерис и запустите скрипт от него через sudo. Возможно, потребуется добавить выполнение скрипта через sudo и разрешить пользователю Астериск выполнять его в sudoers
Проверять надо именно sudo -u asterisk ./tg.sh, а не su asterisk && ./tg.sh
Потому как конфиг лежит в /root/./telegram-cli и сколько ни давай на нее права 777, доступа все равно не будет на самом деле.
user@ubuntu:~$ sudo -u asterisk /etc/asterisk/tg.sh
[sudo] password for user:
Telegram-cli version 1.4.1, Copyright © 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
Telegram-cli uses libtgl version 2.1.0
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
I: config dir=[/home/user/.telegram-cli]
phone number: +79178000000
code ('CALL' for phone code):
*** 1466413970.477063 incorrect code
code ('CALL' for phone code): 46120
User Denis online (was online [2016/06/20 14:17:55])
> telegram-cli: loop.c:480: write_auth_file: Assertion `auth_file_fd >= 0' failed.
SIGNAL received
h/etc/telegram-cli/tg/bin/telegram-cli(print_backtrace+0x2c)[0x80a998c]
/etc/telegram-cli/tg/bin/telegram-cli(termination_signal_handler+0x7d)[0x80a9a2d]
[0xb7737404]
[0xb7737428]
/lib/i386-linux-gnu/libc.so.6(gsignal+0x47)[0xb72f8687]
/lib/i386-linux-gnu/libc.so.6(abort+0x143)[0xb72fbab3]
/lib/i386-linux-gnu/libc.so.6(+0x277c7)[0xb72f17c7]
/lib/i386-linux-gnu/libc.so.6(+0x27877)[0xb72f1877]
/etc/telegram-cli/tg/bin/telegram-cli(write_auth_file+0x147)[0x80ab417]
/etc/telegram-cli/tg/bin/telegram-cli(on_login+0x17)[0x80ac5c7]
/etc/telegram-cli/tg/bin/telegram-cli(tgl_export_auth_callback+0x62)[0x80e6072]
/etc/telegram-cli/tg/bin/telegram-cli[0x80d3637]
/etc/telegram-cli/tg/bin/telegram-cli(tglq_query_result+0x12f)[0x80db2bf]
/etc/telegram-cli/tg/bin/telegram-cli[0x80d0ac6]
/etc/telegram-cli/tg/bin/telegram-cli[0x80d20e2]
/etc/telegram-cli/tg/bin/telegram-cli[0x80fceec]
/usr/lib/i386-linux-gnu/libevent-2.0.so.5(event_base_loop+0x6f4)[0xb76f3234]
/etc/telegram-cli/tg/bin/telegram-cli(net_loop+0xc2)[0x80ab1f2]
/etc/telegram-cli/tg/bin/telegram-cli(loop+0x1d7)[0x80ac917]
/etc/telegram-cli/tg/bin/telegram-cli(inner_main+0x17)[0x80a8eb7]
/etc/telegram-cli/tg/bin/telegram-cli(main+0x365)[0x80a7f25]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb72e3af3]
/etc/telegram-cli/tg/bin/telegram-cli[0x80a8051]

Переустановил /etc/telegram-cli/ Каких прав не хватает и где?
я сделал проще: папку telegram-cli скопировал в /var/lib/asterisk и дал права правильные
У меня FreePBX 13. Добавил строку вызова скрипта в диалплан существующего EXT/
exten => 196,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/196/ringtimer)}" > «0»]?${DB(AMPUSER/196/ringtimer)}:${RINGTIMER_DEFAULT})})
exten => 196,n,Set(name=nikolay_a)
exten => 196,n,TrySystem(/home/asterisk/telegram.sh ${name} «Входящий звонок от ${CALLERID(num)}»)
exten => 196,n,Macro(exten-vm,novm,196,0,0,0)
exten => 196,n(dest),Set(__PICKUPMARK=)
exten => 196,n,Goto(${IVR_CONTEXT},return,1)
exten => 196,hint,SIP/196&Custom:DND196,CustomPresence:196

Скрипт положил в домашний каталог asterisk, выдал все права
[root@freepbx asterisk]# ls -l /home/asterisk/telegram.sh
-rwxr-xr-x 1 asterisk asterisk 184 Oct 1 04:36 /home/asterisk/telegram.sh

Сам скрипт отрабатывает 100%, в нем есть проверочная строка
[root@freepbx asterisk]# cat /home/asterisk/telegram.sh
#!/bin/bash
name=$1
text=$2
/bin/echo 2 > /home/asterisk/test — файл создается и перезаписывается.
/var/lib/asterisk/tg/bin/telegram-cli -k /var/lib/asterisk/tg/tg-server.pub -U asterisk -W -e «msg $name $text»
exit 0

Если запустить скрипт через sudo -u — сообщение в телеграмм приходит. при звонке сообщение не приходит…
Sign up to leave a comment.