В качестве отступления, признаюсь, что с астериском я работал только по AMI, а про диалплан только слышал. И только сейчас пришлось начать изучать астериск более глубоко и с другой стороны, раз с наскока через AMI не получилось.
Теперь возвращаясь к теме:
Еще раз поймите разницу - СОБЫТИЕ и КОМАНДА.
Но ведь для астериска ДТМФ приходящее из сети - это именно событие. Да и вообще не важно как называть, главное что куда идёт. Вы видимо хотите сказать, что событием называется, то что уходит от астериска во вне (например моему клиенту по AMI), а командой то, что приходит в него из вне. В этом случае я просто не правильно назвал функцию - Нужно не SendEventToDialplan, а SendCommandToDialplan, но аргументы будут теже (в моём случае это CommandType_DTMF и строка с цифрами).
Вообще как ДТМФ поступает в диалплан? Я думаю, что есть 2 способа:
1) В диалплане есть что-то типа колбэков, (регистрируется нечто типа функции на получение внешних событий типа ДТМФ) который вызывается ядром при приходе ДТМФ из сети
2) В диалплане вызывается некая ф-я, например, WaitDTMF, на которой диалплан засыпает, а когда приходит из сети ДТМФ, происходит выход из ф-ии и в качестве результата эта ф-я возвращает этот самый ДТМФ
По другому эти 2 варианта можно назвать как асинхронный и синхронный. Но и в одном и другом случае вместо слова "сеть" может быть что угодно и теоретически можно реализовать возможность подсунуть требуемый ДТМФ ядру не по сети, а по другому интерфейсу, а ядро далее либо (1)вызовет колбэк, либо (2) выйдет из ф-ии.
Ещё можно пояснить так:
ядро (астериска) имеет несколько интерфейсов получения
внешних событий
1) сокетовый интерфейс, получающий данные из сети
2) интерфейс командной строки
3) ...
И в 1-ом и во 2-м случает поидее ДТМФ можно дать астериску, вопрос в том реализовано ли это в астериске.