juniorph Postado Maio 22 Compartilhar Postado Maio 22 Olá pessoal, hoje precisei entrar em contato com alguns clientes pelo whatsapp para passar algumas informações, e é muito chato ter que ficar salvando contato, ou editando o link do whatspp manualmente, então criei esse hook simples que adiciona um botão de WhatsApp na pagina do perfil do cliente no painel de administração do WHMCS, facilitando para entrar em contato com o cliente direto pelo whatsapp, espero que sirva para mais alguém! O resultado é esse: https://prnt.sc/6qVjouVUSmhQ A instalação é simples, basta colocar o código em um arquivo php com nome de sua preferência e colocar o arquivo em includes/hooks do seu whmcs. <?php use WHMCS\Database\Capsule; // Bloqueia o acesso direto ao arquivo if (!defined("WHMCS")){ die("Acesso restrito!"); } // Pagina de Administrador add_hook("AdminAreaClientSummaryPage", 1, function($vars){ // Obtém o ID do cliente da variável $vars $clientId = $vars['userid']; // Busca o número de telefone do cliente na tabela 'tblclients' $client = Capsule::table('tblclients')->where('id', $clientId)->first(); // Verifica se o cliente foi encontrado if ($client && !empty($client->phonenumber)) { // Formata o número de telefone $phoneNumber = preg_replace('/\D/', '', $client->phonenumber); $whatsappLink = "https://api.whatsapp.com/send?phone=55" . $phoneNumber; // Retorna o botão do WhatsApp return "<a href='" . $whatsappLink . "' class='btn btn-success' target='_blank'>WhatsApp</a>"; } else { // Caso o número de telefone não esteja disponível, exibe uma mensagem return "<a href='#' class='btn btn-default disabled'>WhatsApp (Número não disponível)</a>"; } }); Qualquer sugestão só falar, comenta se foi útil para você 4 Citar Link para o comentário Compartilhar em outros sites More sharing options...
juniorph Postado Maio 22 Autor Compartilhar Postado Maio 22 uma pequena modificação, como só falei com cliente do brasil, deixei pré-definido o código do pais como '55' nesse código, ele vai puxar do banco de dados o código do pais e preencher corretamente o código no link do whatsapp. <?php use WHMCS\Database\Capsule; // Bloqueia o acesso direto ao arquivo if (!defined("WHMCS")){ die("Acesso restrito!"); } // Função para mapear códigos de países function getCountryCallingCode($countryCode) { $countryCallingCodes = [ 'AF' => '93', 'AL' => '355', 'DZ' => '213', 'AS' => '1684', 'AD' => '376', 'AO' => '244', 'AI' => '1264', 'AQ' => '672', 'AG' => '1268', 'AR' => '54', 'AM' => '374', 'AW' => '297', 'AU' => '61', 'AT' => '43', 'AZ' => '994', 'BS' => '1242', 'BH' => '973', 'BD' => '880', 'BB' => '1246', 'BY' => '375', 'BE' => '32', 'BZ' => '501', 'BJ' => '229', 'BM' => '1441', 'BT' => '975', 'BO' => '591', 'BA' => '387', 'BW' => '267', 'BR' => '55', 'BN' => '673', 'BG' => '359', 'BF' => '226', 'BI' => '257', 'KH' => '855', 'CM' => '237', 'CA' => '1', 'CV' => '238', 'KY' => '1345', 'CF' => '236', 'TD' => '235', 'CL' => '56', 'CN' => '86', 'CO' => '57', 'KM' => '269', 'CG' => '242', 'CD' => '243', 'CR' => '506', 'HR' => '385', 'CU' => '53', 'CY' => '357', 'CZ' => '420', 'DK' => '45', 'DJ' => '253', 'DM' => '1767', 'DO' => '1809', 'EC' => '593', 'EG' => '20', 'SV' => '503', 'GQ' => '240', 'ER' => '291', 'EE' => '372', 'SZ' => '268', 'ET' => '251', 'FJ' => '679', 'FI' => '358', 'FR' => '33', 'GA' => '241', 'GM' => '220', 'GE' => '995', 'DE' => '49', 'GH' => '233', 'GR' => '30', 'GD' => '1473', 'GU' => '1671', 'GT' => '502', 'GN' => '224', 'GW' => '245', 'GY' => '592', 'HT' => '509', 'HN' => '504', 'HK' => '852', 'HU' => '36', 'IS' => '354', 'IN' => '91', 'ID' => '62', 'IR' => '98', 'IQ' => '964', 'IE' => '353', 'IL' => '972', 'IT' => '39', 'JM' => '1876', 'JP' => '81', 'JO' => '962', 'KZ' => '7', 'KE' => '254', 'KI' => '686', 'KP' => '850', 'KR' => '82', 'KW' => '965', 'KG' => '996', 'LA' => '856', 'LV' => '371', 'LB' => '961', 'LS' => '266', 'LR' => '231', 'LY' => '218', 'LI' => '423', 'LT' => '370', 'LU' => '352', 'MO' => '853', 'MK' => '389', 'MG' => '261', 'MW' => '265', 'MY' => '60', 'MV' => '960', 'ML' => '223', 'MT' => '356', 'MH' => '692', 'MR' => '222', 'MU' => '230', 'MX' => '52', 'FM' => '691', 'MD' => '373', 'MC' => '377', 'MN' => '976', 'ME' => '382', 'MA' => '212', 'MZ' => '258', 'MM' => '95', 'NA' => '264', 'NR' => '674', 'NP' => '977', 'NL' => '31', 'NZ' => '64', 'NI' => '505', 'NE' => '227', 'NG' => '234', 'NU' => '683', 'NF' => '672', 'MP' => '1670', 'NO' => '47', 'OM' => '968', 'PK' => '92', 'PW' => '680', 'PS' => '970', 'PA' => '507', 'PG' => '675', 'PY' => '595', 'PE' => '51', 'PH' => '63', 'PL' => '48', 'PT' => '351', 'PR' => '1', 'QA' => '974', 'RO' => '40', 'RU' => '7', 'RW' => '250', 'WS' => '685', 'SM' => '378', 'ST' => '239', 'SA' => '966', 'SN' => '221', 'RS' => '381', 'SC' => '248', 'SL' => '232', 'SG' => '65', 'SK' => '421', 'SI' => '386', 'SB' => '677', 'SO' => '252', 'ZA' => '27', 'SS' => '211', 'ES' => '34', 'LK' => '94', 'SD' => '249', 'SR' => '597', 'SE' => '46', 'CH' => '41', 'SY' => '963', 'TW' => '886', 'TJ' => '992', 'TZ' => '255', 'TH' => '66', 'TL' => '670', 'TG' => '228', 'TO' => '676', 'TT' => '1868', 'TN' => '216', 'TR' => '90', 'TM' => '993', 'TV' => '688', 'UG' => '256', 'UA' => '380', 'AE' => '971', 'GB' => '44', 'US' => '1', 'UY' => '598', 'UZ' => '998', 'VU' => '678', 'VE' => '58', 'VN' => '84', 'YE' => '967', 'ZM' => '260', 'ZW' => '263' // Adicione mais códigos conforme necessário ]; return isset($countryCallingCodes[$countryCode]) ? $countryCallingCodes[$countryCode] : ''; } // Pagina de Administrador add_hook("AdminAreaClientSummaryPage", 1, function($vars){ // Obtém o ID do cliente da variável $vars $clientId = $vars['userid']; // Busca o número de telefone e a sigla do país do cliente na tabela 'tblclients' $client = Capsule::table('tblclients')->where('id', $clientId)->first(['phonenumber', 'country']); // Verifica se o cliente foi encontrado if ($client && !empty($client->phonenumber) && !empty($client->country)) { // Formata o número de telefone $phoneNumber = preg_replace('/\D/', '', $client->phonenumber); // Obtém o código de discagem do país $countryCode = strtoupper($client->country); $callingCode = getCountryCallingCode($countryCode); // Verifica se o código de discagem do país foi encontrado if (!empty($callingCode)) { $whatsappLink = "https://api.whatsapp.com/send?phone=" . $callingCode . $phoneNumber; // Retorna o botão do WhatsApp return "<a href='" . $whatsappLink . "' class='btn btn-success' target='_blank'> WhatsApp</a>"; } else { return "<a href='#' class='btn btn-default disabled'> WhatsApp (Código de país não encontrado)</a>"; } } else { // Caso o número de telefone ou a sigla do país não esteja disponível, exibe uma mensagem return "<a href='#' class='btn btn-default disabled'> WhatsApp (Informação incompleta)</a>"; } }); 2 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Enio F. Postado Maio 22 Compartilhar Postado Maio 22 muito útil, parabéns! 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Streaming Postado Maio 24 Compartilhar Postado Maio 24 Isto só funciona se o cliente tiver cadastrado um celular que seja WhatsApp, certo? E se o cliente for PJ e tiver cadastrado um fixo (algo muito comum)? Faço essas perguntas pq eu deixo uma espécie de campo customizado com o título "WhatsApp" justamente para estas situações em que o cliente cadastra o telefone fixo como principal (geralmente é do Depto Financeiro da empresa dele), daí tem este campo adicional para ele preencher o WhatsApp no cadastro (deixo o preenchimento como opcional). 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
juniorph Postado Maio 24 Autor Compartilhar Postado Maio 24 28 minutos atrás, Streaming disse: Isto só funciona se o cliente tiver cadastrado um celular que seja WhatsApp, certo? E se o cliente for PJ e tiver cadastrado um fixo (algo muito comum)? Faço essas perguntas pq eu deixo uma espécie de campo customizado com o título "WhatsApp" justamente para estas situações em que o cliente cadastra o telefone fixo como principal (geralmente é do Depto Financeiro da empresa dele), daí tem este campo adicional para ele preencher o WhatsApp no cadastro (deixo o preenchimento como opcional). Nesse caso, alterei a configuração para puxar a informação do custom Field Altere somente essa linha para funcionar $customFieldId = 14; // Altere para o ID do seu custom field para saber o ID do seu custom field pode simplesmente inspecionar elemento no campo do whatsapp na pagina de cadastro do seu site: https://prnt.sc/5vw2xu1LCU0z ou pode olhar direto pelo phpmyadmin na tabela 'tblcustomfields': https://prnt.sc/96_qHHq39WBr <?php use WHMCS\Database\Capsule; // Bloqueia o acesso direto ao arquivo if (!defined("WHMCS")){ die("Acesso restrito!"); } // Função para mapear códigos de países function getCountryCallingCode($countryCode) { $countryCallingCodes = [ 'AF' => '93', 'AL' => '355', 'DZ' => '213', 'AS' => '1684', 'AD' => '376', 'AO' => '244', 'AI' => '1264', 'AQ' => '672', 'AG' => '1268', 'AR' => '54', 'AM' => '374', 'AW' => '297', 'AU' => '61', 'AT' => '43', 'AZ' => '994', 'BS' => '1242', 'BH' => '973', 'BD' => '880', 'BB' => '1246', 'BY' => '375', 'BE' => '32', 'BZ' => '501', 'BJ' => '229', 'BM' => '1441', 'BT' => '975', 'BO' => '591', 'BA' => '387', 'BW' => '267', 'BR' => '55', 'BN' => '673', 'BG' => '359', 'BF' => '226', 'BI' => '257', 'KH' => '855', 'CM' => '237', 'CA' => '1', 'CV' => '238', 'KY' => '1345', 'CF' => '236', 'TD' => '235', 'CL' => '56', 'CN' => '86', 'CO' => '57', 'KM' => '269', 'CG' => '242', 'CD' => '243', 'CR' => '506', 'HR' => '385', 'CU' => '53', 'CY' => '357', 'CZ' => '420', 'DK' => '45', 'DJ' => '253', 'DM' => '1767', 'DO' => '1809', 'EC' => '593', 'EG' => '20', 'SV' => '503', 'GQ' => '240', 'ER' => '291', 'EE' => '372', 'SZ' => '268', 'ET' => '251', 'FJ' => '679', 'FI' => '358', 'FR' => '33', 'GA' => '241', 'GM' => '220', 'GE' => '995', 'DE' => '49', 'GH' => '233', 'GR' => '30', 'GD' => '1473', 'GU' => '1671', 'GT' => '502', 'GN' => '224', 'GW' => '245', 'GY' => '592', 'HT' => '509', 'HN' => '504', 'HK' => '852', 'HU' => '36', 'IS' => '354', 'IN' => '91', 'ID' => '62', 'IR' => '98', 'IQ' => '964', 'IE' => '353', 'IL' => '972', 'IT' => '39', 'JM' => '1876', 'JP' => '81', 'JO' => '962', 'KZ' => '7', 'KE' => '254', 'KI' => '686', 'KP' => '850', 'KR' => '82', 'KW' => '965', 'KG' => '996', 'LA' => '856', 'LV' => '371', 'LB' => '961', 'LS' => '266', 'LR' => '231', 'LY' => '218', 'LI' => '423', 'LT' => '370', 'LU' => '352', 'MO' => '853', 'MK' => '389', 'MG' => '261', 'MW' => '265', 'MY' => '60', 'MV' => '960', 'ML' => '223', 'MT' => '356', 'MH' => '692', 'MR' => '222', 'MU' => '230', 'MX' => '52', 'FM' => '691', 'MD' => '373', 'MC' => '377', 'MN' => '976', 'ME' => '382', 'MA' => '212', 'MZ' => '258', 'MM' => '95', 'NA' => '264', 'NR' => '674', 'NP' => '977', 'NL' => '31', 'NZ' => '64', 'NI' => '505', 'NE' => '227', 'NG' => '234', 'NU' => '683', 'NF' => '672', 'MP' => '1670', 'NO' => '47', 'OM' => '968', 'PK' => '92', 'PW' => '680', 'PS' => '970', 'PA' => '507', 'PG' => '675', 'PY' => '595', 'PE' => '51', 'PH' => '63', 'PL' => '48', 'PT' => '351', 'PR' => '1', 'QA' => '974', 'RO' => '40', 'RU' => '7', 'RW' => '250', 'WS' => '685', 'SM' => '378', 'ST' => '239', 'SA' => '966', 'SN' => '221', 'RS' => '381', 'SC' => '248', 'SL' => '232', 'SG' => '65', 'SK' => '421', 'SI' => '386', 'SB' => '677', 'SO' => '252', 'ZA' => '27', 'SS' => '211', 'ES' => '34', 'LK' => '94', 'SD' => '249', 'SR' => '597', 'SE' => '46', 'CH' => '41', 'SY' => '963', 'TW' => '886', 'TJ' => '992', 'TZ' => '255', 'TH' => '66', 'TL' => '670', 'TG' => '228', 'TO' => '676', 'TT' => '1868', 'TN' => '216', 'TR' => '90', 'TM' => '993', 'TV' => '688', 'UG' => '256', 'UA' => '380', 'AE' => '971', 'GB' => '44', 'US' => '1', 'UY' => '598', 'UZ' => '998', 'VU' => '678', 'VE' => '58', 'VN' => '84', 'YE' => '967', 'ZM' => '260', 'ZW' => '263' ]; return isset($countryCallingCodes[$countryCode]) ? $countryCallingCodes[$countryCode] : ''; } // Define o ID do custom field para o número de telefone $customFieldId = 14; // Altere para o ID do seu custom field // Página de Administrador add_hook("AdminAreaClientSummaryPage", 1, function($vars) use ($customFieldId) { // Obtém o ID do cliente da variável $vars $clientId = $vars['userid']; // Busca a sigla do país do cliente na tabela 'tblclients' $client = Capsule::table('tblclients')->where('id', $clientId)->first(['country']); // Busca o número de telefone no custom field $customFieldValue = Capsule::table('tblcustomfieldsvalues') ->where('relid', $clientId) ->where('fieldid', $customFieldId) ->value('value'); // Verifica se o cliente foi encontrado e se o número de telefone e a sigla do país estão disponíveis if ($client && !empty($customFieldValue) && !empty($client->country)) { // Remove espaços, pontos, parênteses e hifens do número de telefone $phoneNumber = preg_replace('/[\s\.\-\(\)]/', '', $customFieldValue); // Obtém o código de discagem do país $countryCode = strtoupper($client->country); $callingCode = getCountryCallingCode($countryCode); // Verifica se o número já contém um código de país if (strpos($phoneNumber, '+') === 0) { // Remove o sinal de "+" do início $phoneNumber = substr($phoneNumber, 1); } elseif (strpos($phoneNumber, $callingCode) === 0) { // Se o número já começa com o código de país, não adicione novamente } else { // Adiciona o código de discagem do país no início do número $phoneNumber = $callingCode . $phoneNumber; } // Cria o link do WhatsApp $whatsappLink = "https://api.whatsapp.com/send?phone=" . $phoneNumber; // Retorna o botão do WhatsApp return "<a href='" . $whatsappLink . "' class='btn btn-success' target='_blank'> WhatsApp</a>"; } else { // Caso o número de telefone ou a sigla do país não esteja disponível, exibe uma mensagem return "<a href='#' class='btn btn-default disabled'> WhatsApp (Informação incompleta)</a>"; } }); 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.