Отправка интерактивного голосового ответа через DTMF во время разговора - PullRequest
0 голосов
/ 27 февраля 2020

Контекст:

Я занимаюсь разработкой полного телефонного приложения android, которое будет иметь все телефонные возможности по умолчанию и будет работать как телефонное приложение по умолчанию, как только пользователь решит, что оно будет телефонное приложение по умолчанию.

Результаты поиска по SO:

Я не нашел никаких потоков, специально предназначенных для отправки тонов DTMF в систему IVR посредством текущего вызова.

Функциональность, которую я реализую:

  1. Вызов продолжается (очевидно, только через мое приложение)
  2. Допустим, я позвонил номер центра
  3. Колл-центр просит меня выбрать язык, нажимая цифры от 1/2/3 до 9, *, #
  4. Я нажимаю нужную ди git. (Очевидно, с помощью моей программы дозвона)
  5. Мой дилаер способен генерировать DTMF звуки 0 - 9, * # через ToneGenerator
  6. Но ничего не происходит, поскольку колл-центр не получает мой ответ нажатыми цифрами .. !!

Мой код, который генерирует звуки DTMF:

public class Tone_Generator extends IntentService
{
private static int i = 0;
private static final int SLEEP_DURATION = 2000;

public Tone_Generator() {
    super("Tone_Generator");
}

@Override
protected void onHandleIntent(Intent intent)
{
    int key;
    if (intent != null)
    {
        if (intent.hasExtra("tone"))
        {
            key = intent.getIntExtra("tone", 0);
            play(key);
        }
    }
}

private void play(final int key)
{
    Thread t = new Thread(new Runnable()
    {
        @Override
        public void run()
        {
            ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_DTMF, 100);
            try
            {
                switch(key)
                {
                    case 0:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_0,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 1:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_1,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 2:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_2,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 3:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_3,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 4:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_4,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 5:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_5,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 6:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_6,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 7:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_7,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 8:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_8,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 9:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_9,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 11:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_S,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                    case 12:
                        toneGenerator.startTone(ToneGenerator.TONE_DTMF_P,200);
                        Log.d("TONE : ", " PLAYING TONE = " + key + " \n ");
                        break;
                }

                Thread.sleep(SLEEP_DURATION);
                toneGenerator.release();
            }
            catch (Exception e)
            {
                e.printStackTrace();
                Log.d("TONE : ", " ON ERROR.. \n ");
            }
            finally
            {
                Log.d("TONE : ", " FINISHED.. \n ");
                toneGenerator = null;
            }
        }
    });
    t.start();

}
}

Он идеально генерирует тоны от 0 до 9 и для * и # как телефон по умолчанию приложение все еще не может отправлять Interactive Voice Response сигналы в вызываемый колл-центр

Это будет отличная помощь от других разработчиков, которые уже реализовали такие функции, заранее спасибо и любая помощь будет оценена.

...