Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Playground project aimed at setting up Asterisk server and the GSM stack on Nix.

NotificationsYou must be signed in to change notification settings

sergei-mironov/asterisk-dongle-setup

Repository files navigation

This project aims at wiring together many pieces of Linux software required todo the following:

  • Receive SMS messages and forward them to a Telegram chat.
  • Receive GSM voice calls and forward them toTelegram voice calls (Telegram voice calls are broken due toInfactum/tg2sip#63)or to a SIP client.
  • Forward outgoing voice callsfrom Telegram from SIP client back to GSM
  • Handle incoming voice calls with aLenny prank bot.
  • Voice room with a chat bot.

Specifically, the setup includesAsterisk server withtheGSM-modem dongle andtg2sip bridge and many other componentsglued together with Shell and Python scripts. The high degree of buildautomation is achieved thanks to theNix package manager.

Scheme

Contents

  1. Contents
  2. Setup
  3. Usage
  4. Hardware notes
  5. Known issues
  6. Thirdparty issues
  7. Administration hints
  8. References

Setup

Walkthrough

  1. InstallNix package manager andupdate Nixpkgs repositories. This whole project is designed as a collectionof nix-build expressions.

    • Note that Nix could co-exist with your native package manager.
    • We use21.05 Nixpkgs branch commitas a base, but older 20.03 commits should also work.
  2. Go and get a GSM modem.

    Modem E173

    You need to find asupported GSM modem and plug it into the USB port of your computer. We testedHuawei-E173 only, but in theory any model supported bychan_dongleshould work.

    • A somewhat outdated document about supported hardware is availablehere.We typically do care about Voice and SMS functions and don't care about USSD.
    • ./run.sh will check for the presence of/dev/ttyUSB0. Ifit is not present, the script would attempt to run theusb_modeswitchprocedure.
    • Currently we automate switching only for Huawei E173 modem.For other models, try to follow the section aboutmanual mode-switching.
  3. git clone --recursive <this-repo-url> ; cd ...

  4. Create./secrets.nix file by copying and editing./secrets_template.nix.

    • You need a mobile phone which is bound to some Telegram account.
    • Go tohttps://my.telegram.org/auth and register an API Client instance.You will be provided withapi_id andapi_hash values.
    • The bot token field is not currently used.
    • The Chat id field is a (typically negative) identifier of a chat to send SMS messagesto../run.sh will print available chat identifiers atsome point during the startup.
  5. Please be informed that the main script./run.sh is VERY INSECURE.It configures Asterisk to use binary codec and then runs it as root.

  6. If you are OK with the above notice, run./run.sh.

    • The script asks Nix to (re-)build everything that is required.
    • At first run script will initialize Telegram session for python relayscript.
      • As a part of initialization, Telegram server will send a digitalcode to your Telegram account.
      • You are to type this code back into the script.
    • At first run the script will also initialize another Telegram session, thistime fortg2sip (TODO: find out how to reuse the first session).
      • It will ask you a phone number with Telegram account.
      • Telegram will send a code to your account. You have to read it and typeit back into the script.
    • At every run, the script runs a number of background services including theAsteris ARI client, SMS spool script, tg2sip application etc.
    • Finally, the Asterisk is run in foreground. You should see its*CLI>console prompt and be able type commands.
  7. ???

  8. Check theUsage section.

Doing USB Modeswitch manually

run.sh attempts to run usb_modeswitch procedure automatically for devicesknown to author. In case the procedure fails, one could attempt the manual way:

  1. nix-build -A usb_modeswitch.
  2. lsusb to find out your modem's vendor:product numbers
  3. sudo ./result/usr/sbin/usb_modeswitch -v <vendor> -p <product> -X
  4. /dec/ttyUSB[01] devices should appear. You should be abletominicom -D /dev/ttyUSB0 and type some AT command, sayATI.
  5. Updaterun.sh script by adding new line like below to thecorresponding place
    try_to_deal_with "<your_device_id>" "<your_device_vendor>" && wait_for_chardev "/dev/ttyUSB0"
  6. Send us a PR with it.

Nix-shell

Author uses VIM as the main development IDE. The start procedure is as follows:

$ nix-shell(nix-shell) $ vim .   # Edit sources enjoying code navigaiton(nix-shell) $ ipython # Testing telethon bot, etc

Usage

  • To send SMS from the GSM modem, use the Asterisk CLI:dongle sms dongle0 89097777777 HiHi.
  • Send SMS or make a call to your GSMmodem SIM card's number. Asterisk willredirect the call to yourtelegram_master_nicname Telegram account.
    • For voice calls, If you pick up the phone from your Telegram account (thegreen button), the GSM-to-Telegram connection will be established.
    • If you cancel the Telegram call by pressing the red button instead, thecaller will be handled by the braveLennychatbot.
    • In either case, Asterisk will record the call and send the recording to theTelegramtelegram_chat_id (could be a group) withwav attachments.
  • From a thirdparty telegram account call to the account associated withsecrets.telegram_phone, then go to the private chat and send a message witha phone number to call to. Asterisk will initiate an outgoing callfrom your Telegram account to the GSM network.
  • Here is how to use a SIP softphone application, e.g.linphone
    • Install the softphone application.
    • Setup a local SIP account:<sip:softphone@192.168.1.2:5063> where192.168.1.2 should be copied intosoftphone_bind_ip address. The5063is the SIP port the softphone application should listen to. It is hardcodedintodefault.nix currently.
    • Set a remote SIP account to be<sip:softphone@192.168.1.1> where192.168.1.1 is yourasterisk_bind_ip (could be the same assoftphone_bind_ip). Set 'softphone' as a password (also hardcoded).
    • Call tosip:1001@192.168.1.1 to talk to Lenny bot
    • Call tosip:1000@192.168.1.1 to start the outgoing GSM call.
      • After the connection is established, open Telegam chat withtelegram_master_nicname and send the GSM number to call to (a simpleoneline message). Asterisk will use GSM dongle to call this number.

Hardware notes

We use the following USB dongle:

*CLI> dongle show devicesID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Numberdongle0      0     Free       9    0    0       Beeline        E173       11.126.85.00.209  ***************  ***************  Unknown

See alsosomewhat outdated list of supported devices

Known issues

  • tg2sip calls stopped working properly. GSM callers hear themselves butcan't hear the telegram side. Softphone calls work fine.

  • tg2sip crashes on incoming calls :(Infactum/tg2sip#63

Thirdparty issues

Administration hints

Ulaw audio operations:

  • Converting 3gpp to ulaw:./3gpp2ulaw.sh
  • Playing ulaw file:aplay -t raw -f MU_LAW <FILE>

Cutting last x seconds from an audio file

cutlast() {  ffmpeg -i"$2" -ss 0 -to$(echo$(ffprobe -i"$2" -show_entries format=duration -v quiet -of csv="p=0") -"$1"| bc) -c copy"$3"}

Clearing dongle SMS messages

#!/bin/bash -xcmds(){cat<<EOFdongle cmd dongle0 AT+CPMS=\"SM\",\"SM\",\"SM\"dongle cmd dongle0 AT+CMGD=1,4dongle cmd dongle0 AT+CPMS=\"ME\",\"ME\",\"ME\"dongle cmd dongle0 AT+CMGD=1,4exitEOF}cmds| asterisk -r

Useful Asterisk commands

Show channels

core show channels

References

GSM modems

Asterisk

PJSIP

ARI

Telegram

Hardware

Fun

About

Playground project aimed at setting up Asterisk server and the GSM stack on Nix.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp