Добавление языковой переменной в WWW::Mailchimp (подписка)

Я пытаюсь понять, как использовать WWW::Mailchimp ( http://search.cpan.org/~arcanez/WWW-Mailchimp/), чтобы подписать кого-то в наш список, но также назначить язык человека (например, английский, французский, немецкий, испанский, и т.д).

Вот что у меня есть до сих пор:

my $mailchimp = WWW::Mailchimp->new(apikey => 'xxxx' );
   $mailchimp->listSubscribe( id => "xxx", email_address => $in->{Email}, merge_vars => [ FNAME => $name[0], LNAME => $name[1], mc_language => "fr", LANG => "fr", LANGUAGE => "fr" ] );

mc_language => "fr", LANG => "fr", LANGUAGE => "fr", кажется, ничего не делает (пробовал все параметры, которые я видел, в тщетной надежде из них работает!)

Пока он работает (и просит подтвердить подписку), все языковые переменные игнорируются. Глядя на их документы, я немного смущен тем, что использовать:

https://apidocs.mailchimp.com/api/2.0/lists/subscribe.php

Код "fr" в порядке, но я не уверен, какие параметры ему передать.

У кого-нибудь был опыт с этим раньше? Помимо языка, он отлично работает (но мне нужно иметь возможность отправлять письма с подтверждением на их родном языке, а затем также фильтровать при рассылках)

ОБНОВЛЕНИЕ: Хорошо, похоже, это не будет простым обновлением до более нового API. Я изучал API v3.0, и это полная переработка старого (новые имена функций, новые способы отправки запросов и т. д.). Что я собираюсь сделать, так это изучить метод «Curl», чтобы мы могли, по крайней мере, с ним работать. Как только я это сделаю, я, вероятно, посмотрю, как написать что-нибудь для работы с LWP::UserAgent, так как это будет чище, чем выполнение множества запросов curl. Жаль, что для Perl и MailChimp уже ничего нет (с новым API или даже версией 2.0!)


person Andrew Newby    schedule 06.10.2015    source источник


Ответы (2)


Судя по источнику, по умолчанию используется API 1.3:

has api_version => (
  is => 'ro',
  isa => Num,
  lazy => 1,
  default => sub { 1.3 },
);

Документация для этого показывает, что вам нужно использовать MC_LANGUAGE:

string MC_LANGUAGE Задать предпочтительный язык участника. Поддерживаемые коды полностью чувствительны к регистру, и их можно найти здесь.

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

person Oesor    schedule 06.10.2015
comment
Спасибо за ответ. Это, похоже, не помогает (подтверждение по-прежнему приходит на английском языке): $mailchimp->listSubscribe( id => "75a6bfd589", email_address => $in->{Email}, merge_vars => [ FNAME => $name[0], LNAME => $name[1], MC_LANGUAGE => "fr" ] ); ... есть идеи? - person Andrew Newby; 06.10.2015
comment
Ммм, должно быть что-то не так с 1.3 API. Даже FNAME и LNAME не передаются при использовании: merge_vars => [ FNAME => 'xxxx', LNAME => 'yxxx', MC_LANGUAGE => "fr" ]. Возможно, завтра я попробую еще раз, но добавлю немного отладки в файл MailChimp.pm, чтобы я мог видеть, какой запрос на самом деле вызывается (похоже, стоит также перейти на версию 3.0, так как 1.3 и 2.0 похоже все равно обесцениваются :)) - person Andrew Newby; 06.10.2015
comment
Итак, похоже, это НАМНОГО сложнее, чем я надеялся! У меня нет: https://us6.api.mailchimp.com/2.0/lists/subscribe.json?apikey=xxxx&id=xxxx&email[email]=xxxx&merge_vars[FNAME]=John&merge_vars[LNAME]=Doe&merge_vars[MC_LANGUAGE]=fr ... однако он по-прежнему игнорирует язык :/ Я собираюсь посмотреть, смогу ли я найти конкретный форум MailChimp, чтобы попытаться спросить, что происходит - person Andrew Newby; 07.10.2015

Хорошо, так что я добрался туда в конце концов! Я разговаривал со службой поддержки MailChimp, и они мне очень помогли. Оказывается, это была двойная проблема.

1) Для рассматриваемого списка должен быть включен Автоперевод. Это был их ответ на это:

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

У нас есть немного дополнительной информации об этом, здесь, если вы хотите проверить это: http://kb.mailchimp.com/lists/signup-forms/translate-signup-forms-and-emails#Auto-Translate-Forms

2) При выполнении запроса через API нужно специально указать значение Accept-Language: xx. Например, en, fr, es, de и т. д.

Вот рабочая функция для тех, кому она понадобится в будущем. Просто не забудьте обновить apikey, listId и URL-адрес конечной точки.

do_register_email_list('[email protected]','Andrew Test',"en")

sub do_register_email_list {
# (email,name,lang)

    use WWW::Curl::Easy;
    use Digest::MD5;
    use JSON;

    my @name = split /\s+/, $_[1];
    my $apikey = 'xxxx-us6';
    my $listid = 'xxxx';
    my $email = $_[0];
    my $endpoint = "https://us6.api.mailchimp.com/3.0/lists";
    my $lang = $_[2]||'en';

    my $json = JSON::encode_json({
        'email_address' => $email,
        'status'        => 'pending',
        'language' => $lang,
        'merge_fields'  => {
            'FNAME'     => $name[0]||'',
            'LNAME'     => $name[1]||''
        }
    });

    my $curl = WWW::Curl::Easy->new;

    my $url = "$endpoint/$listid/members/" . Digest::MD5::md5(lc($email));

    $curl->setopt(CURLOPT_HEADER,1);
    $curl->setopt(CURLOPT_URL, $url);

#    $curl->setopt(CURLOPT_VERBOSE, 1);
    $curl->setopt(CURLOPT_USERPWD, 'user:' . $apikey);
    $curl->setopt(CURLOPT_HTTPHEADER, ['Content-Type: application/json',"Accept-Language: $lang"]);
    $curl->setopt(CURLOPT_TIMEOUT, 10);
    $curl->setopt(CURLOPT_CUSTOMREQUEST, 'PUT');
    $curl->setopt(CURLOPT_SSL_VERIFYPEER, 0);
    $curl->setopt(CURLOPT_POSTFIELDS, $json);

    # A filehandle, reference to a scalar or reference to a typeglob can be used here.
    my $response_body;
    $curl->setopt(CURLOPT_WRITEDATA,\$response_body);

    # Starts the actual request
    my $retcode = $curl->perform;

#print "FOO HERE";
    # Looking at the results...
    if ($retcode == 0) {
        print "Transfer went ok\n";
        my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
        print "Received response: $response_body\n";
    } else {
        # Error code, type of error, error message
        print "An error happened: $retcode ".$curl->strerror($retcode)." ".$curl->errbuf."\n";
    }
}

Надеюсь, это спасет кого-то еще от всех моих печалей :) (женщина из службы поддержки MailChimp также сказала, что попросит их команду добавить что-то об этом в заметки для разработчиков, так что это стало немного яснее!)

person Andrew Newby    schedule 14.10.2015