Существует основное приложение, которое работает с БД.
Надо написать побочное приложение, которое будет работать с asterisk и, соответственно, с данными в БД. Мне кажется принципиально неверным, чтобы такое приложение работало напрямую с БД (с учётом того, что оно может не только читать, но и вносить некоторые изменения).
Поэтому есть идея сделать для asterisk отдельное API. Насколько правильно такое решение? И как можно его было бы правильно реализовать (sockets, cURL, ...)?
если смотреть с точки зрения SOA service oriented architecture, то все модули должны общаться между собой с помощью API.
То есть, ответ на первый вопрос: «В принципе, это нормальное решение. Можете написать модуль работы с БД, и для начала пусть с ним работает asterisk. Потом вы можете вдохновиться идеями SOA, и полностью все модули так переделаете».
По второму можно много чего насоветовать. Делайте RESTfull интерфейсы, самое простое по-моему для начала