message_send_inbound.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. //only allow command line
  3. if (defined('STDIN')) {
  4. //set the include path
  5. $conf = glob("{/usr/local/etc,/etc}/fusionpbx/config.conf", GLOB_BRACE);
  6. set_include_path(parse_ini_file($conf[0])['document.root']);
  7. }
  8. else {
  9. exit;
  10. }
  11. //increase limits
  12. //set_time_limit(0);
  13. ini_set('max_execution_time',30); //seconds
  14. ini_set('memory_limit', '512M');
  15. //include files
  16. require_once "resources/require.php";
  17. include "resources/classes/cache.php";
  18. include "resources/classes/permissions.php";
  19. //save the arguments to variables
  20. $script_name = $argv[0];
  21. if (!empty($argv[1])) {
  22. parse_str($argv[1], $_GET);
  23. }
  24. //print_r($_GET);
  25. //set the variables
  26. if (isset($_GET['hostname'])) {
  27. $hostname = urldecode($_GET['hostname']);
  28. }
  29. if (isset($_GET['debug'])) {
  30. $debug = $_GET['debug'];
  31. }
  32. if (isset($_GET['message_queue_uuid'])) {
  33. $message_queue_uuid = urldecode($_GET['message_queue_uuid']);
  34. }
  35. //set the hostname if it wasn't provided
  36. if (!isset($hostname) && strlen($hostname) == 0) {
  37. $hostname = system('hostname');
  38. }
  39. //log information
  40. if (isset($debug)) {
  41. //print_r($_GET);
  42. echo "message_queue_uuid ".$message_queue_uuid."\n";
  43. echo "hostname ".$hostname."\n";
  44. }
  45. //get the message details to send
  46. $sql = "select * from v_message_queue ";
  47. $sql .= "where message_queue_uuid = :message_queue_uuid ";
  48. $sql .= "and hostname = :hostname ";
  49. $parameters['hostname'] = $hostname;
  50. $parameters['message_queue_uuid'] = $message_queue_uuid;
  51. $database = new database;
  52. $row = $database->select($sql, $parameters, 'row');
  53. //view_array($row, false);
  54. if (is_array($row)) {
  55. $domain_uuid = $row["domain_uuid"];
  56. $message_queue_uuid = $row["message_queue_uuid"];
  57. $user_uuid = $row["user_uuid"];
  58. $group_uuid = $row["group_uuid"];
  59. $contact_uuid = $row["contact_uuid"];
  60. $provider_uuid = $row["provider_uuid"];
  61. //$hostname = $row["hostname"];
  62. $message_type = $row["message_type"];
  63. $message_direction = $row["message_direction"];
  64. $message_date = $row["message_date"];
  65. $message_from = $row["message_from"];
  66. $message_to = $row["message_to"];
  67. $message_text = $row["message_text"];
  68. $message_json = $row["message_json"];
  69. }
  70. unset($parameters);
  71. //get the provider settings
  72. $sql = "select provider_setting_category, provider_setting_subcategory, provider_setting_name, provider_setting_value, provider_setting_order \n";
  73. $sql .= "from v_provider_settings \n";
  74. $sql .= "where provider_uuid = :provider_uuid \n";
  75. $sql .= "and provider_setting_category = 'inbound' \n";
  76. $sql .= "and provider_setting_enabled = 'true'; \n";
  77. $parameters['provider_uuid'] = $provider_uuid;
  78. $database = new database;
  79. $provider_settings = $database->select($sql, $parameters, 'all');
  80. unset($parameters);
  81. //echo $sql;
  82. //print_r($parameters);
  83. //print_r(provider_settings);
  84. //
  85. //echo "\n";
  86. //set default values
  87. //$http_method = 'POST';
  88. //process the provider settings array
  89. foreach ($provider_settings as $row) {
  90. //format the phone numbers
  91. if ($row['provider_setting_subcategory'] == 'format') {
  92. if ($row['provider_setting_name'] == 'message_from') {
  93. $message_from = format_string($row['provider_setting_value'], $message_from);
  94. }
  95. if ($row['provider_setting_name'] == 'message_to') {
  96. $message_to = format_string($row['provider_setting_value'], $message_to);
  97. }
  98. }
  99. //get the http method
  100. //if ($row['provider_setting_subcategory'] == 'method') {
  101. // if ($row['provider_setting_name'] == 'http_method') {
  102. // $http_method = $row['provider_setting_value'];
  103. // }
  104. //}
  105. }
  106. //get the list of extensions using the user_uuid
  107. $sql = "select * from v_domains as d, v_extensions as e ";
  108. $sql .= "where extension_uuid in ( ";
  109. $sql .= " select extension_uuid ";
  110. $sql .= " from v_extension_users ";
  111. $sql .= " where user_uuid = :user_uuid ";
  112. $sql .= ") ";
  113. $sql .= "and e.domain_uuid = d.domain_uuid ";
  114. $sql .= "and e.enabled = 'true' ";
  115. $parameters['user_uuid'] = $user_uuid;
  116. $database = new database;
  117. $extensions = $database->select($sql, $parameters, 'all');
  118. //view_array($extensions, false);
  119. unset($sql, $parameters);
  120. //send the sip message
  121. if (is_array($extensions) && @sizeof($extensions) != 0) {
  122. //echo "\n".__line__."\n";
  123. //create the event socket connection
  124. $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
  125. //loop through assigned extensions
  126. foreach ($extensions as $extension) {
  127. //get variables from the array
  128. $domain_name = $extension['domain_name'];
  129. $extension = $extension['extension'];
  130. $number_alias = $extension['number_alias'] ?? null;
  131. //user registered get the sip profile
  132. //$command = "sofia_contact ".$extension."@".$domain_name;
  133. //if (isset($debug)) {
  134. // echo $command."\n";
  135. //}
  136. //$response = trim(event_socket_request($fp, "api ".$command));
  137. //if ($response != 'error/user_not_registered') {
  138. // echo $extension." registered\n";
  139. // $sip_profile = explode("/", $response)[1];
  140. //}
  141. //user not registered skip the rest of code in the loop
  142. //if ($response == 'error/user_not_registered') {
  143. // echo $extension." not registered\n";
  144. // continue;
  145. //}
  146. //original number with the domain name
  147. $message_from = $message_from .'@'.$domain_name;
  148. //send to the assigned extension(s)
  149. $message_to = $extension . '@'.$domain_name;
  150. //$message_to = '[email protected]';
  151. //add debug info to the message
  152. //$message_content = $message_content . ' - ' .$message_to_orig;
  153. //send the SIP message (working)
  154. $event = "sendevent CUSTOM\n";
  155. $event .= "Event-Subclass: SMS::SEND_MESSAGE\n";
  156. $event .= "proto: sip\n";
  157. $event .= "dest_proto: sip\n";
  158. $event .= "from: ".$message_from."\n";
  159. $event .= "from_full: sip:".$message_from."\n";
  160. $event .= "to: ".$message_to."\n";
  161. $event .= "subject: sip:".$message_to."\n";
  162. //$event .= "type: text/html\n";
  163. $event .= "type: text/plain\n";
  164. $event .= "hint: the hint\n";
  165. $event .= "replying: true\n";
  166. $event .= "sip_profile: ".($sip_profile ?? '')."\n";
  167. $event .= "_body: ". $message_text;
  168. event_socket_request($fp, $event);
  169. unset($event);
  170. }
  171. }
  172. //set the message status to sent
  173. $sql = "update v_message_queue ";
  174. $sql .= "set message_status = 'sent' ";
  175. $sql .= "where message_queue_uuid = :message_queue_uuid; ";
  176. $parameters['message_queue_uuid'] = $message_queue_uuid;
  177. //echo __line__." ".$sql."\n";
  178. //print_r($parameters);
  179. $database = new database;
  180. $database->execute($sql, $parameters);
  181. unset($parameters);
  182. //set the last message in the cache
  183. $cache = new cache;
  184. $cache->set("messages:user:last_message:".$user_uuid, date('r'));
  185. //how to use it
  186. // php /var/www/fusionpbx/app/messages/resources/service/message_send_inbound.php message_queue_uuid=39402652-1475-49f8-8366-7889335edd6f&hostname=voip.fusionpbx.com
  187. ?>